mult_lq Interface

public interface mult_lq

Module Procedures

private subroutine mult_lq_mtx(lside, trans, a, tau, c, work, olwork, err)

Multiplies a matrix by the orthogonal matrix from an LQ factorization.

Arguments

Type IntentOptional Attributes Name
logical, intent(in) :: lside

Set to true to compute ; else, set to false to compute .

logical, intent(in) :: trans

Set to true to compute ; else, set to false to compute .

real(kind=real64), intent(in), dimension(:,:) :: a

On input, an K-by-P matrix containing the elementary reflectors output from the LQ factorization. If lside is set to true, P = M; else, if lside is set to false, P = N.

real(kind=real64), intent(in), dimension(:) :: tau

A K-element array containing the scalar factors of each elementary reflector defined in a.

real(kind=real64), intent(inout), dimension(:,:) :: c

On input, the M-by-N matrix C. On output, the product of the orthogonal matrix Q and the original matrix C.

real(kind=real64), intent(out), optional, target, dimension(:) :: work

An optional input, that if provided, prevents any local memory allocation. If not provided, the memory required is allocated within. If provided, the length of the array must be at least olwork.

integer(kind=int32), intent(out), optional :: olwork

An optional output used to determine workspace size. If supplied, the routine determines the optimal size for work, and returns without performing any actual calculations.

class(errors), intent(inout), optional, target :: err

The error object to be updated.

private subroutine mult_lq_mtx_cmplx(lside, trans, a, tau, c, work, olwork, err)

Multiplies a matrix by the orthogonal matrix from an LQ factorization.

Arguments

Type IntentOptional Attributes Name
logical, intent(in) :: lside

Set to true to compute ; else, set to false to compute .

logical, intent(in) :: trans

Set to true to compute ; else, set to false to compute .

complex(kind=real64), intent(in), dimension(:,:) :: a

On input, an K-by-P matrix containing the elementary reflectors output from the LQ factorization. If lside is set to true, P = M; else, if lside is set to false, P = N.

complex(kind=real64), intent(in), dimension(:) :: tau

A K-element array containing the scalar factors of each elementary reflector defined in a.

complex(kind=real64), intent(inout), dimension(:,:) :: c

On input, the M-by-N matrix C. On output, the product of the orthogonal matrix Q and the original matrix C.

complex(kind=real64), intent(out), optional, target, dimension(:) :: work

An optional input, that if provided, prevents any local memory allocation. If not provided, the memory required is allocated within. If provided, the length of the array must be at least olwork.

integer(kind=int32), intent(out), optional :: olwork

An optional output used to determine workspace size. If supplied, the routine determines the optimal size for work, and returns without performing any actual calculations.

class(errors), intent(inout), optional, target :: err

The error object to be updated.

private subroutine mult_lq_vec(trans, a, tau, c, work, olwork, err)

Multiplies a vector with the orthogonal matrix from an LQ factorization such that .

Arguments

Type IntentOptional Attributes Name
logical, intent(in) :: trans

Set to true to compute ; else, set to false to compute .

real(kind=real64), intent(in), dimension(:,:) :: a

On input, an K-by-M matrix containing the elementary reflectors output from the LQ factorization. Notice, the contents of this matrix are restored on exit.

real(kind=real64), intent(in), dimension(:) :: tau

A K-element array containing the scalar factors of each elementary reflector defined in a.

real(kind=real64), intent(inout), dimension(:) :: c

On input, the M-element vector . On output, the product of the orthogonal matrix and the original vector .

real(kind=real64), intent(out), optional, target, dimension(:) :: work

An optional input, that if provided, prevents any local memory allocation. If not provided, the memory required is allocated within. If provided, the length of the array must be at least olwork.

integer(kind=int32), intent(out), optional :: olwork

An optional output used to determine workspace size. If supplied, the routine determines the optimal size for work, and returns without performing any actual calculations.

class(errors), intent(inout), optional, target :: err

The error object to be updated.

private subroutine mult_lq_vec_cmplx(trans, a, tau, c, work, olwork, err)

Multiplies a vector with the orthogonal matrix from an LQ factorization such that .

Arguments

Type IntentOptional Attributes Name
logical, intent(in) :: trans

Set to true to compute ; else, set to false to compute .

complex(kind=real64), intent(in), dimension(:,:) :: a

On input, an K-by-M matrix containing the elementary reflectors output from the LQ factorization. Notice, the contents of this matrix are restored on exit.

complex(kind=real64), intent(in), dimension(:) :: tau

A K-element array containing the scalar factors of each elementary reflector defined in a.

complex(kind=real64), intent(inout), dimension(:) :: c

On input, the M-element vector . On output, the product of the orthogonal matrix and the original vector .

complex(kind=real64), intent(out), optional, target, dimension(:) :: work

An optional input, that if provided, prevents any local memory allocation. If not provided, the memory required is allocated within. If provided, the length of the array must be at least olwork.

integer(kind=int32), intent(out), optional :: olwork

An optional output used to determine workspace size. If supplied, the routine determines the optimal size for work, and returns without performing any actual calculations.

class(errors), intent(inout), optional, target :: err

The error object to be updated.